Dependency Injection এর মৌলিক ধারণা

Microsoft Technologies - এমভিভিএম (MVVM) Dependency Injection এবং Inversion of Control (IoC) |
163
163

Dependency Injection (DI) একটি ডিজাইন প্যাটার্ন যা সফটওয়্যার ডেভেলপমেন্টে ব্যবহৃত হয়, বিশেষ করে অ্যাপ্লিকেশনগুলিতে যেখানে বিভিন্ন ক্লাসের মধ্যে নির্ভরশীলতা (dependencies) থাকে। এই প্যাটার্নটির মাধ্যমে, ক্লাসগুলোর মধ্যে নির্ভরশীলতা সরাসরি ইনস্ট্যান্সিয়েট বা তৈরি করা না হয়ে, বাইরের কোনও উৎস (যেমন একটি IoC Container বা Dependency Injection Container) থেকে সরবরাহ করা হয়।

DI একটি গুরুত্বপূর্ণ কৌশল যা ক্লাসগুলোকে একে অপরের উপর নির্ভরশীলতা কমাতে সাহায্য করে এবং Loosely Coupled (অর্থাৎ, একে অপরের থেকে স্বাধীন) কোড তৈরিতে সহায়ক হয়।


Dependency Injection এর মূল ধারণা

Dependency Injection এমন একটি প্রক্রিয়া যেখানে একটি ক্লাস তার প্রয়োজনীয় ডিপেনডেন্সি (অথবা নির্ভরশীল অবজেক্ট) বাইরের একটি সোর্স থেকে পায়, না যে নিজে তা তৈরি করে। এটি Inversion of Control (IoC) এর একটি বিশেষ রূপ, যেখানে ক্লাস নিজে তার নির্ভরশীলতাগুলো তৈরি করার পরিবর্তে বাইরের একটি কনটেইনার বা ফ্যাক্টরি এসব নির্ভরশীলতা সরবরাহ করে।

কিভাবে Dependency Injection কাজ করে:

ধরা যাক, একটি OrderService ক্লাস আছে যা PaymentService এবং CustomerService এর উপর নির্ভরশীল। DI ব্যবহার না করলে, OrderService নিজেই এই সেবাগুলোর ইনস্ট্যান্স তৈরি করবে। কিন্তু Dependency Injection এর মাধ্যমে, এই সেবাগুলোর ইনস্ট্যান্স সরবরাহ করা হয় বাইরের কোনও সোর্স থেকে (যেমন IoC Container)।


Dependency Injection এর উপকারিতা

  • Loose Coupling: Dependency Injection ক্লাসগুলোর মধ্যে সম্পর্ক কমিয়ে দেয়, কারণ এক ক্লাস আরেকটি ক্লাসের উপর সরাসরি নির্ভরশীল না হয়ে, বাইরের কনটেইনার থেকে নির্ভরশীলতাগুলো ইনজেক্ট হয়।
  • Testability: যখন নির্ভরশীলতাগুলো বাইরের সোর্স থেকে ইনজেক্ট হয়, তখন তা unit testing সহজ করে তোলে। আপনি সহজে মক বা স্টাব অবজেক্ট ইনজেক্ট করে ফাংশনালিটি পরীক্ষা করতে পারেন।
  • Flexibility and Maintainability: কোডের মধ্যে পরিবর্তন করা সহজ হয় কারণ ডিপেনডেন্সির প্রকার পরিবর্তন করলে সেই পরিবর্তনটি কেবল কনফিগারেশনে ঘটবে, কোডের মধ্যে নয়।
  • Code Reusability: একাধিক ক্লাস একই নির্ভরশীলতাগুলো ব্যবহার করতে পারে, যার ফলে কোড পুনরায় ব্যবহার করা সহজ হয়।

Dependency Injection এর তিনটি প্রধান ধরণ

  1. Constructor Injection:

    • এই ধরণে, নির্ভরশীলতা (ডিপেনডেন্সি) কনস্ট্রাক্টরের মাধ্যমে ইনজেক্ট করা হয়। এটি সবচেয়ে সাধারণ এবং প্রাথমিক DI পদ্ধতি।

    উদাহরণ:

    public class OrderService
    {
        private readonly IPaymentService _paymentService;
        private readonly ICustomerService _customerService;
    
        // Constructor Injection
        public OrderService(IPaymentService paymentService, ICustomerService customerService)
        {
            _paymentService = paymentService;
            _customerService = customerService;
        }
    }
    

    এখানে, OrderService ক্লাসের কনস্ট্রাক্টরে PaymentService এবং CustomerService ইনজেক্ট করা হচ্ছে।

  2. Property Injection:

    • এই ধরণে, নির্ভরশীলতা প্রপার্টি বা ফিল্ডের মাধ্যমে ইনজেক্ট করা হয়। এটি সাধারণত তখন ব্যবহার হয় যখন নির্ভরশীলতা ইনজেক্ট করার সময় কিছু অপশনাল ডিপেনডেন্সি থাকতে পারে।

    উদাহরণ:

    public class OrderService
    {
        public IPaymentService PaymentService { get; set; }
        public ICustomerService CustomerService { get; set; }
    
        // Property Injection
    }
    
  3. Method Injection:

    • এই ধরণে, নির্ভরশীলতা মেথডের মাধ্যমে ইনজেক্ট করা হয়। এটি সেই সময় ব্যবহৃত হয় যখন নির্দিষ্ট একটি মেথডের জন্য নির্ভরশীলতা প্রদান করতে হয়।

    উদাহরণ:

    public class OrderService
    {
        public void ProcessOrder(IPaymentService paymentService, ICustomerService customerService)
        {
            // Process order using the injected services
        }
    }
    

Dependency Injection Container

একটি DI Container বা Inversion of Control (IoC) Container হল এমন একটি ফ্রেমওয়ার্ক বা লাইব্রেরি যা নির্ভরশীলতা পরিচালনা করে। এটি ক্লাসের নির্ভরশীলতাগুলো ইনজেক্ট করার কাজ সহজ করে দেয়। .NET Framework, ASP.NET Core, Spring (Java) এর মতো জনপ্রিয় ফ্রেমওয়ার্কগুলো এই ধরনের কন্টেইনার ব্যবহার করে।

  • ASP.NET Core এ DI কন্টেইনারের মাধ্যমে, আপনি কনস্ট্রাক্টর ইনজেকশন বা অন্য কোনো পদ্ধতি ব্যবহার করে নির্ভরশীলতা ইনজেক্ট করতে পারেন।

    উদাহরণ:

    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            // Register dependencies
            services.AddScoped<IPaymentService, PaymentService>();
            services.AddScoped<ICustomerService, CustomerService>();
            services.AddScoped<OrderService>();
        }
    }
    

    এখানে, OrderService এর নির্ভরশীলতাগুলি PaymentService এবং CustomerService DI কন্টেইনারে রেজিস্টার করা হচ্ছে।


সারাংশ

Dependency Injection হল একটি প্যাটার্ন যা কোডের মধ্যে ক্লাসগুলোর মধ্যে নির্ভরশীলতা কমিয়ে দেয় এবং কোডকে আরও মেইনটেইনেবল ও টেস্টেবল করে তোলে। এটি বিভিন্ন ধরণের ইনজেকশন পদ্ধতির মাধ্যমে নির্ভরশীলতাগুলো সরবরাহ করে, যার মাধ্যমে কোডের নমনীয়তা বৃদ্ধি পায় এবং ফ্লেক্সিবিলিটি নিশ্চিত হয়। DI ব্যবহারের মাধ্যমে আপনি সহজেই ক্লাসের নির্ভরশীলতা ম্যানেজ করতে পারেন এবং ডিপেনডেন্সি চেইন তৈরির ঝামেলা এড়িয়ে যেতে পারেন।

common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion